package leetcode_day._2021._202112._2131;

import java.util.Arrays;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/12/27 10:47
 * 适龄的朋友
 * 算法：排序 + 双指针
 * 对于确定的 y 来说，能够发送给 y 的 x 的数量有多少
 * 当题目给出的所有条件为 false 时，y 才会接受 x 的请求
 */
public class _27_825 {

    public int numFriendRequests(int[] ages) {
        Arrays.sort(ages);
        int ans = 0, n = ages.length;
        for (int k = 0, i = 0, j = 0; k < n; k++) {
            // 使用 i 是因为数组可能会重复
            while (i < k && !check(ages[k], ages[i])) ++i;
            if (j < k) j = k;
            while (j < n && check(ages[k], ages[j])) ++j;
            if (j > i) ans += j - i - 1;
        }
        return ans;
    }
    boolean check(int y, int x) {
        if (y <= 0.5 * x + 7) return false;
        if (y > x) return false;
        if (y > 100 && x < 100) return false;
        return true;
    }

}
